/*
 *
 *    Copyright (c) 2022 Project CHIP Authors
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

// THIS FILE IS GENERATED BY ZAP
// This file is generated from clusters-shared-Enums-Check.h.zapt

#pragma once

#include <clusters/shared/Enums.h>

namespace chip {
namespace app {
namespace Clusters {
static auto __attribute__((unused)) EnsureKnownEnumValue(detail::ChangeIndicationEnum val)
{
    using EnumType = detail::ChangeIndicationEnum;
    switch (val)
    {
    case EnumType::kOk:
    case EnumType::kWarning:
    case EnumType::kCritical:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(detail::DegradationDirectionEnum val)
{
    using EnumType = detail::DegradationDirectionEnum;
    switch (val)
    {
    case EnumType::kUp:
    case EnumType::kDown:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(detail::LevelValueEnum val)
{
    using EnumType = detail::LevelValueEnum;
    switch (val)
    {
    case EnumType::kUnknown:
    case EnumType::kLow:
    case EnumType::kMedium:
    case EnumType::kHigh:
    case EnumType::kCritical:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(detail::MeasurementMediumEnum val)
{
    using EnumType = detail::MeasurementMediumEnum;
    switch (val)
    {
    case EnumType::kAir:
    case EnumType::kWater:
    case EnumType::kSoil:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(detail::MeasurementTypeEnum val)
{
    using EnumType = detail::MeasurementTypeEnum;
    switch (val)
    {
    case EnumType::kUnspecified:
    case EnumType::kVoltage:
    case EnumType::kActiveCurrent:
    case EnumType::kReactiveCurrent:
    case EnumType::kApparentCurrent:
    case EnumType::kActivePower:
    case EnumType::kReactivePower:
    case EnumType::kApparentPower:
    case EnumType::kRMSVoltage:
    case EnumType::kRMSCurrent:
    case EnumType::kRMSPower:
    case EnumType::kFrequency:
    case EnumType::kPowerFactor:
    case EnumType::kNeutralCurrent:
    case EnumType::kElectricalEnergy:
    case EnumType::kReactiveEnergy:
    case EnumType::kApparentEnergy:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(detail::MeasurementUnitEnum val)
{
    using EnumType = detail::MeasurementUnitEnum;
    switch (val)
    {
    case EnumType::kPpm:
    case EnumType::kPpb:
    case EnumType::kPpt:
    case EnumType::kMgm3:
    case EnumType::kUgm3:
    case EnumType::kNgm3:
    case EnumType::kPm3:
    case EnumType::kBqm3:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(detail::ProductIdentifierTypeEnum val)
{
    using EnumType = detail::ProductIdentifierTypeEnum;
    switch (val)
    {
    case EnumType::kUpc:
    case EnumType::kGtin8:
    case EnumType::kEan:
    case EnumType::kGtin14:
    case EnumType::kOem:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(Globals::AreaTypeTag val)
{
    using EnumType = Globals::AreaTypeTag;
    switch (val)
    {
    case EnumType::kAisle:
    case EnumType::kAttic:
    case EnumType::kBackDoor:
    case EnumType::kBackYard:
    case EnumType::kBalcony:
    case EnumType::kBallroom:
    case EnumType::kBathroom:
    case EnumType::kBedroom:
    case EnumType::kBorder:
    case EnumType::kBoxroom:
    case EnumType::kBreakfastRoom:
    case EnumType::kCarport:
    case EnumType::kCellar:
    case EnumType::kCloakroom:
    case EnumType::kCloset:
    case EnumType::kConservatory:
    case EnumType::kCorridor:
    case EnumType::kCraftRoom:
    case EnumType::kCupboard:
    case EnumType::kDeck:
    case EnumType::kDen:
    case EnumType::kDining:
    case EnumType::kDrawingRoom:
    case EnumType::kDressingRoom:
    case EnumType::kDriveway:
    case EnumType::kElevator:
    case EnumType::kEnsuite:
    case EnumType::kEntrance:
    case EnumType::kEntryway:
    case EnumType::kFamilyRoom:
    case EnumType::kFoyer:
    case EnumType::kFrontDoor:
    case EnumType::kFrontYard:
    case EnumType::kGameRoom:
    case EnumType::kGarage:
    case EnumType::kGarageDoor:
    case EnumType::kGarden:
    case EnumType::kGardenDoor:
    case EnumType::kGuestBathroom:
    case EnumType::kGuestBedroom:
    case EnumType::kGuestRoom:
    case EnumType::kGym:
    case EnumType::kHallway:
    case EnumType::kHearthRoom:
    case EnumType::kKidsRoom:
    case EnumType::kKidsBedroom:
    case EnumType::kKitchen:
    case EnumType::kLaundryRoom:
    case EnumType::kLawn:
    case EnumType::kLibrary:
    case EnumType::kLivingRoom:
    case EnumType::kLounge:
    case EnumType::kMediaTvRoom:
    case EnumType::kMudRoom:
    case EnumType::kMusicRoom:
    case EnumType::kNursery:
    case EnumType::kOffice:
    case EnumType::kOutdoorKitchen:
    case EnumType::kOutside:
    case EnumType::kPantry:
    case EnumType::kParkingLot:
    case EnumType::kParlor:
    case EnumType::kPatio:
    case EnumType::kPlayRoom:
    case EnumType::kPoolRoom:
    case EnumType::kPorch:
    case EnumType::kPrimaryBathroom:
    case EnumType::kPrimaryBedroom:
    case EnumType::kRamp:
    case EnumType::kReceptionRoom:
    case EnumType::kRecreationRoom:
    case EnumType::kRoof:
    case EnumType::kSauna:
    case EnumType::kScullery:
    case EnumType::kSewingRoom:
    case EnumType::kShed:
    case EnumType::kSideDoor:
    case EnumType::kSideYard:
    case EnumType::kSittingRoom:
    case EnumType::kSnug:
    case EnumType::kSpa:
    case EnumType::kStaircase:
    case EnumType::kSteamRoom:
    case EnumType::kStorageRoom:
    case EnumType::kStudio:
    case EnumType::kStudy:
    case EnumType::kSunRoom:
    case EnumType::kSwimmingPool:
    case EnumType::kTerrace:
    case EnumType::kUtilityRoom:
    case EnumType::kWard:
    case EnumType::kWorkshop:
    case EnumType::kToilet:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(Globals::AtomicRequestTypeEnum val)
{
    using EnumType = Globals::AtomicRequestTypeEnum;
    switch (val)
    {
    case EnumType::kBeginWrite:
    case EnumType::kCommitWrite:
    case EnumType::kRollbackWrite:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(Globals::LandmarkTag val)
{
    using EnumType = Globals::LandmarkTag;
    switch (val)
    {
    case EnumType::kAirConditioner:
    case EnumType::kAirPurifier:
    case EnumType::kBackDoor:
    case EnumType::kBarStool:
    case EnumType::kBathMat:
    case EnumType::kBathtub:
    case EnumType::kBed:
    case EnumType::kBookshelf:
    case EnumType::kChair:
    case EnumType::kChristmasTree:
    case EnumType::kCoatRack:
    case EnumType::kCoffeeTable:
    case EnumType::kCookingRange:
    case EnumType::kCouch:
    case EnumType::kCountertop:
    case EnumType::kCradle:
    case EnumType::kCrib:
    case EnumType::kDesk:
    case EnumType::kDiningTable:
    case EnumType::kDishwasher:
    case EnumType::kDoor:
    case EnumType::kDresser:
    case EnumType::kLaundryDryer:
    case EnumType::kFan:
    case EnumType::kFireplace:
    case EnumType::kFreezer:
    case EnumType::kFrontDoor:
    case EnumType::kHighChair:
    case EnumType::kKitchenIsland:
    case EnumType::kLamp:
    case EnumType::kLitterBox:
    case EnumType::kMirror:
    case EnumType::kNightstand:
    case EnumType::kOven:
    case EnumType::kPetBed:
    case EnumType::kPetBowl:
    case EnumType::kPetCrate:
    case EnumType::kRefrigerator:
    case EnumType::kScratchingPost:
    case EnumType::kShoeRack:
    case EnumType::kShower:
    case EnumType::kSideDoor:
    case EnumType::kSink:
    case EnumType::kSofa:
    case EnumType::kStove:
    case EnumType::kTable:
    case EnumType::kToilet:
    case EnumType::kTrashCan:
    case EnumType::kLaundryWasher:
    case EnumType::kWindow:
    case EnumType::kWineCooler:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(Globals::LocationTag val)
{
    using EnumType = Globals::LocationTag;
    switch (val)
    {
    case EnumType::kIndoor:
    case EnumType::kOutdoor:
    case EnumType::kInside:
    case EnumType::kOutside:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(Globals::MeasurementTypeEnum val)
{
    using EnumType = Globals::MeasurementTypeEnum;
    switch (val)
    {
    case EnumType::kUnspecified:
    case EnumType::kVoltage:
    case EnumType::kActiveCurrent:
    case EnumType::kReactiveCurrent:
    case EnumType::kApparentCurrent:
    case EnumType::kActivePower:
    case EnumType::kReactivePower:
    case EnumType::kApparentPower:
    case EnumType::kRMSVoltage:
    case EnumType::kRMSCurrent:
    case EnumType::kRMSPower:
    case EnumType::kFrequency:
    case EnumType::kPowerFactor:
    case EnumType::kNeutralCurrent:
    case EnumType::kElectricalEnergy:
    case EnumType::kReactiveEnergy:
    case EnumType::kApparentEnergy:
    case EnumType::kSoilMoisture:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(Globals::PositionTag val)
{
    using EnumType = Globals::PositionTag;
    switch (val)
    {
    case EnumType::kLeft:
    case EnumType::kRight:
    case EnumType::kTop:
    case EnumType::kBottom:
    case EnumType::kMiddle:
    case EnumType::kRow:
    case EnumType::kColumn:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(Globals::PowerThresholdSourceEnum val)
{
    using EnumType = Globals::PowerThresholdSourceEnum;
    switch (val)
    {
    case EnumType::kContract:
    case EnumType::kRegulator:
    case EnumType::kEquipment:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(Globals::RelativePositionTag val)
{
    using EnumType = Globals::RelativePositionTag;
    switch (val)
    {
    case EnumType::kUnder:
    case EnumType::kNextTo:
    case EnumType::kAround:
    case EnumType::kOn:
    case EnumType::kAbove:
    case EnumType::kFrontOf:
    case EnumType::kBehind:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(Globals::SoftwareVersionCertificationStatusEnum val)
{
    using EnumType = Globals::SoftwareVersionCertificationStatusEnum;
    switch (val)
    {
    case EnumType::kDevTest:
    case EnumType::kProvisional:
    case EnumType::kCertified:
    case EnumType::kRevoked:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(Globals::StreamUsageEnum val)
{
    using EnumType = Globals::StreamUsageEnum;
    switch (val)
    {
    case EnumType::kInternal:
    case EnumType::kRecording:
    case EnumType::kAnalysis:
    case EnumType::kLiveView:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(Globals::TariffPriceTypeEnum val)
{
    using EnumType = Globals::TariffPriceTypeEnum;
    switch (val)
    {
    case EnumType::kStandard:
    case EnumType::kCritical:
    case EnumType::kVirtual:
    case EnumType::kIncentive:
    case EnumType::kIncentiveSignal:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(Globals::TariffUnitEnum val)
{
    using EnumType = Globals::TariffUnitEnum;
    switch (val)
    {
    case EnumType::kKWh:
    case EnumType::kKVAh:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(Globals::TestGlobalEnum val)
{
    using EnumType = Globals::TestGlobalEnum;
    switch (val)
    {
    case EnumType::kSomeValue:
    case EnumType::kSomeOtherValue:
    case EnumType::kFinalValue:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(Globals::ThreeLevelAutoEnum val)
{
    using EnumType = Globals::ThreeLevelAutoEnum;
    switch (val)
    {
    case EnumType::kAuto:
    case EnumType::kLow:
    case EnumType::kMedium:
    case EnumType::kHigh:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
static auto __attribute__((unused)) EnsureKnownEnumValue(Globals::WebRTCEndReasonEnum val)
{
    using EnumType = Globals::WebRTCEndReasonEnum;
    switch (val)
    {
    case EnumType::kICEFailed:
    case EnumType::kICETimeout:
    case EnumType::kUserHangup:
    case EnumType::kUserBusy:
    case EnumType::kReplaced:
    case EnumType::kNoUserMedia:
    case EnumType::kInviteTimeout:
    case EnumType::kAnsweredElsewhere:
    case EnumType::kOutOfResources:
    case EnumType::kMediaTimeout:
    case EnumType::kLowPower:
    case EnumType::kPrivacyMode:
    case EnumType::kUnknownReason:
        return val;
    default:
        return EnumType::kUnknownEnumValue;
    }
}
} // namespace Clusters
} // namespace app
} // namespace chip
